絶対パスと相対パス
ディレクトリやファイルの位置・経路を示す文字列をパスと呼びます。
パスはコマンドラインやプログラム等の処理に欠かせない重要な知識です。
ここではパス(絶対パス・相対パス)を解説します。
パス
パスはディレクトリやファイルの位置・経路を示す文字列です。
例えば、次のようなディレクトリ構成があるとします。
.
ITHACK
├── sample
│ ├── code.txt
│ └── tmp.txt
└── work
├── abc
│ ├── memo.txt
│ └── test.txt
└── xyz
├── x.txt
└── y.txt
この時のmemo.txt
ファイルのパスは次のようになります。
/ITHACK/work/abc/memo.txt
パスはスラッシュ(/)、ディレクトリ名、ファイル名で構成されます。
ここでは最上階層のディレクトリを起点に対象のファイル(memo.txt
)までの経路をスラッシュ(/
)区切りで記述しています。
このパスは『ITHACK
ディレクトリの中のwork
ディレクトリの中のabc
ディレクトリの中のmemo.txt
ファイル』というように解釈することができます。
パスはどこを起点にするかで、絶対パスか相対パスに分類されます。
※ 上記は絶対パスです。詳細は後述します。
特定ディレクトリ
絶対パス・相対パスの理解にあたり、特定のディレクトリについて知る必要があります。
ルートディレクトリ
ルートディレクトリは最上階層のディレクトリです。
ディレクトリ名はなく、パスはスラッシュ(/)のみで示します。
/
カレントディレクトリ
カレントディレクトリは作業中のディレクトリです。
コマンドラインの滞在ディレクトリや、プログラムの実行ディレクトリがこのディレクトリにあたります。
コマンドラインの“cdコマンドによるディレクトリ切り替え”は“カレントディレクトリの切り替え”ということになります。
パスはドット(.)で示します。
.
ホームディレクトリ
パスの理解ではルートディレクトリとカレントディレクトリのみで構いませんが、ホームディレクトリもコマンドライン、プログラムでは重要になります。
ホームディレクトリはユーザーがログインしたときに最初に設定されるディレクトリです。
パスはユーザーによって異なりますが、チルダ(~)の省略形で示すことができます。
~
絶対パス
絶対パスはルートディレクトリ(最上階層のディレクトリ)を起点に経路を示したパスです。
上記ディレクトリ構成のmemo.txtの絶対パスは次のようになります。
/ITHACK/work/abc/memo.txt
例えば、指定パスのファイル内容を表示するcatコマンドでサンプルを示すと次のようになります。
$ cat /ITHACK/work/abc/memo.txt
This is memo.
相対パス
相対パスはカレントディレクトリ(作業中のディレクトリ)を起点に経路を示したパスです。
上記ディレクトリ構成でカレントディレクトリがworkの時の、memo.txtの相対パスは次のようになります。
abc/memo.txt
カレントディレクトリを示すドット(.)から記述することも可能です。
./abc/memo.txt
例えば、指定パスのファイル内容を表示するcatコマンドでサンプルを示すと次のようになります。
$ cat abc/memo.txt
This is memo.
また、1つ上の階層を示すにはドットを2つ(..)繋げます。
これを利用するとtmp.txtの相対パスは次のようになります。
../sample/tmp.txt
$ cat ../sample/tmp.txt
This is tmp.
使い分け
絶対パスと相対パスはどちらもディレクトリやファイルの位置・経路を示すものです。
いずれもディレクトリやファイルのパスを示すことができますが、状況によって適した使い分けがあります。
それぞれのメリット・デメリットを理解していきましょう。
絶対パス
メリット
カレントディレクトリに左右されず同じディレクトリ・ファイルを示すことができる。
デメリット
ディレクトリ階層が異なる環境(例えば他のコンピュータ)などではパスが異なる場合がある。
相対パス
メリット
ディレクトリ構成が異なってもカレントディレクトリから相対的な位置にあるディレクトリ・ファイルを示すことができる
デメリット
カレントディレクトリが変わるとパスに不整合が起こることがある。
まとめ
パスはディレクトリやファイルの位置・経路を示す文字列です。
絶対パスまたは相対パスに分類され、それぞれどこを起点に位置・経路を示すかが変わります。
メリット・デメリットを理解して使い分けられるようになりましょう。